﻿using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.ComponentModel;
using System.Text;
//librerias especiales para la BD
using System.Data;
using System.Data.Common;
using System.Data.SqlClient;
using System.Data.SqlTypes;

namespace CityGames
{
    public class CADPromocion
    {
        static private string cadConexion = System.Configuration.ConfigurationManager.ConnectionStrings["CityGames.Properties.Settings.BDCityGamesConnectionString"].ConnectionString;
        static private CADJuego cadJuego = new CADJuego();
        

        /*************************************************Funciones de Mirellys*************************************************************/
        /// <summary>
        /// Funcion que inserta datos modificados
        /// </summary>
        /// <param name="datosModificados">data set de datos moditicados</param>
        /// <param name="select">sentencia select</param>
        /// <returns></returns>
        public bool InsertarDatosModificados(DataSet datosModificados, string select)
        {
            bool resultado = false;

            try
            {
                SqlConnection conexion = new SqlConnection(cadConexion);
                SqlDataAdapter da = new SqlDataAdapter(select, conexion);
                SqlCommandBuilder cb = new SqlCommandBuilder(da);
                da.Update(datosModificados, datosModificados.Tables[0].TableName);

                resultado = true;
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public int ObtenerCodigoMaximoPromocion()
        {
            int resultado = 0;
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                string select = "SELECT TOP (1) CodigoPromocion FROM Promocion ORDER BY CodigoPromocion DESC";

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = int.Parse(dr["CodigoPromocion"].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="select"></param>
        /// <param name="nombreTabla"></param>
        /// <returns></returns>
        public DataSet ObtenerDatos(string select, string nombreTabla)
        {
            DataSet resultado = new DataSet();

            try
            {
                SqlConnection conexion = new SqlConnection(cadConexion);
                SqlDataAdapter da = new SqlDataAdapter(select, conexion);
                da.Fill(resultado, nombreTabla);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <returns></returns>
        public DataSet ObtenerJuegosVirtuales()
        {
            DataSet resultado = new DataSet();
            string select = "";

            try
            {
                select += "SELECT Nombre, Plataforma, Genero, Sinopsis, Caratula, PrecioNuevo as 'P.Nuevo', PrecioSegundaMano as 'P.2ª Mano', Tarifa, FechaLanzamiento as 'F.Lanzamiento' FROM JuegoVirtual";
                resultado = ObtenerDatos(select, "JuegosSeleccionados");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombreProm"></param>
        /// <param name="tipoDescuento"></param>
        /// <param name="cantidadDescuento"></param>
        /// <param name="fechaInicio"></param>
        /// <param name="fechaFin"></param>
        /// <returns></returns>
        public bool InsertarPromocion(string nombreProm, int tipoDescuento, decimal cantidadDescuento, DateTime fechaInicio, DateTime fechaFin)
        {
            bool resultado = false;
            string insert = "";
            int i = 0;
            int codigoPromocion = 0;
            int cantJuegosVirtuales = 0;
            string nombre = "";
            string plataforma = "";
            string genero = "";

            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;
            DataSet dsJuegosVirtuales = null;
      
            try
            {
                codigoPromocion = ObtenerCodigoMaximoPromocion();
                codigoPromocion++;

                conexion = new SqlConnection(cadConexion);
                conexion.Open();
                tr = conexion.BeginTransaction();

                //obtener data set de juegos virtuales y recorrerlo y para cada uno de los nombrejuego - plataforma insertarlos en juegos promocion

                /*________________________ Insert en el Evento _____________________*/
                insert = "INSERT INTO Promocion (CodigoPromocion, NombrePromocion, TipoDescuento, CantidadDescuento, FechaInicio, FechaFin) ";
                insert += "VALUES ("+ codigoPromocion +", '"+nombreProm+"', " + tipoDescuento + ", @cantidadDescuento, '"+ fechaInicio.ToShortDateString()+"', '"+ fechaFin.ToShortDateString() +"')";

                comandoSql = new SqlCommand(insert, conexion);
                comandoSql.Parameters.Add("@cantidadDescuento", SqlDbType.Decimal);
                comandoSql.Parameters["@cantidadDescuento"].Value = cantidadDescuento;
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                cantJuegosVirtuales = cadJuego.ObtenerNumeroDeJuegosVirtuales();
                dsJuegosVirtuales = ObtenerJuegosVirtuales();
                
                for (i = 0; i < cantJuegosVirtuales; i++)
                {
                    nombre = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Nombre"];
                    plataforma = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Plataforma"];
                    genero = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Genero"];

                    insert = "INSERT INTO JuegosPromociones (Nombre, Plataforma, Codigo) ";
                    insert += "VALUES ('" + nombre + "', '"+plataforma+"', "+codigoPromocion+")";

                    comandoSql = new SqlCommand(insert, conexion);
                    comandoSql.Transaction = tr;
                    comandoSql.ExecuteNonQuery();
                }
                tr.Commit();
                resultado = true;
            }
            catch (Exception ex)
            {
                tr.Rollback();
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
            return resultado;
        }

        public bool BorrarJuegosPromocion(int codigoPromocion)
        {
            bool resultado = false;
            string delete = "";

            SqlConnection conexion = null;
            SqlCommand comandoSql = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                delete = "DELETE FROM JuegosPromociones WHERE (Codigo = " + codigoPromocion + ")";
                
                comandoSql = new SqlCommand(delete, conexion);
                comandoSql.ExecuteNonQuery();
                resultado = true;
            }
            catch (Exception ex)
            {   
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
            return resultado;
        }

        public bool ActualizarPromocion(string nombreProm, int tipoDescuento, decimal cantidadDescuento, DateTime fechaInicio, DateTime fechaFin)
        {
            bool resultado = false;
            string update = "";
            string insert = "";
            int i = 0;
            int codigoPromocion = 0;
            int cantJuegosVirtuales = 0;
            string nombre = "";
            string plataforma = "";
            string genero = "";

            SqlConnection conexion = null;
            SqlTransaction tr = null;
            SqlCommand comandoSql = null;
            DataSet dsJuegosVirtuales = null;

            try
            {
                codigoPromocion = ObtenerCodigoProm(nombreProm);

                conexion = new SqlConnection(cadConexion);
                conexion.Open();
                tr = conexion.BeginTransaction();

                /*________________________ Update en el Evento _____________________*/
                update =  "UPDATE Promocion ";
                update += "SET NombrePromocion = '" + nombreProm + "', TipoDescuento = " + tipoDescuento + ", CantidadDescuento = @cantidadDescuento, FechaInicio = '" + fechaInicio.ToShortDateString() + "', FechaFin = '" + fechaFin.ToShortDateString() + "' ";
                update += "WHERE CodigoPromocion = " + codigoPromocion + "";

                comandoSql = new SqlCommand(update, conexion);
                comandoSql.Parameters.Add("@cantidadDescuento", SqlDbType.Decimal);
                comandoSql.Parameters["@cantidadDescuento"].Value = cantidadDescuento;
                comandoSql.Transaction = tr;
                comandoSql.ExecuteNonQuery();

                BorrarJuegosPromocion(codigoPromocion);
                
                cantJuegosVirtuales = cadJuego.ObtenerNumeroDeJuegosVirtuales();
                dsJuegosVirtuales = ObtenerJuegosVirtuales();

                for (i = 0; i < cantJuegosVirtuales; i++)
                {
                    nombre = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Nombre"];
                    plataforma = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Plataforma"];
                    genero = (string)dsJuegosVirtuales.Tables[0].Rows[i]["Genero"];

                    insert = "INSERT INTO JuegosPromociones (Nombre, Plataforma, Codigo) ";
                    insert += "VALUES ('" + nombre + "', '" + plataforma + "', " + codigoPromocion + ")";

                    comandoSql = new SqlCommand(insert, conexion);
                    comandoSql.Transaction = tr;
                    comandoSql.ExecuteNonQuery();
                }
                tr.Commit();
                resultado = true;
            }
            catch (Exception ex)
            {
                tr.Rollback();
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }
            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public DateTime ObtenerFechaMinima()
        {
            DateTime resultado = new DateTime();
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                string select = "SELECT TOP (1) FechaInicio FROM Promocion WHERE FechaInicio IS NOT NULL ORDER BY FechaInicio ASC";

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = DateTime.Parse(dr[0].ToString());
                else
                    resultado = DateTime.Today;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <returns></returns>
        public DateTime ObtenerFechaMaxima()
        {
            DateTime resultado = new DateTime();
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                string select = "SELECT TOP (1) FechaFin FROM Promocion WHERE FechaFin IS NOT NULL ORDER BY FechaFin DESC";

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = DateTime.Parse(dr[0].ToString());
                else
                    resultado = DateTime.Today;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }
        
        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="genero"></param>
        /// <param name="plataforma"></param>
        /// <param name="fechaInicio"></param>
        /// <param name="fechaFin"></param>
        /// <returns></returns>
        public int ObtenerNumeroDePromocionesFiltradas(string nombre, int tipoDescuento, DateTime fechaInicio, DateTime fechaFin)
        {
            int resultado = 0;
            string select = "";
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();
                
                select += "SELECT COUNT(*) ";
                select += "FROM Promocion ";
                select += "WHERE  (NombrePromocion LIKE '%" + nombre + "%') ";
                if (tipoDescuento != 0)
                    select += "AND (TipoDescuento = " + tipoDescuento + ") ";
                select += "AND (FechaInicio >= '" + fechaInicio.ToShortDateString() + "') AND (FechaFin<= '" + fechaFin.ToShortDateString() + "')";
                
                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = int.Parse(dr[0].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }

        /// <summary>
        /// 
        /// </summary>
        /// <param name="nombre"></param>
        /// <param name="genero"></param>
        /// <param name="plataforma"></param>
        /// <param name="fechaInicio"></param>
        /// <param name="fechaFin"></param>
        /// <param name="desde"></param>
        /// <param name="hasta"></param>
        /// <returns></returns>
        public DataSet ObtenerPromocionesFiltradas(string nombre, int tipoDescuento, DateTime fechaInicio, DateTime fechaFin, int desde, int hasta)
        {
            DataSet resultado = new DataSet();
            string select = "";

            try
            {
                select += "SELECT CodigoPromocion, NombrePromocion as 'Nombre', TipoDescuento as 'Tipo Descuento', CantidadDescuento as 'Cantidad Descuento', FechaInicio as 'Fecha Inicio', FechaFin as 'Fecha Fin'";
                select += "FROM (SELECT CodigoPromocion, NombrePromocion,TipoDescuento, CantidadDescuento,  FechaInicio, FechaFin, ROW_NUMBER() OVER (ORDER BY NombrePromocion ASC) AS ROW ";
                select += "FROM Promocion ";
                select += "WHERE (NombrePromocion LIKE '%" + nombre + "%') ";
                if (tipoDescuento != 0)
                    select += "AND (TipoDescuento = " + tipoDescuento + ") ";
                select += "AND (FechaInicio >= '" + fechaInicio.ToShortDateString() + "') AND (FechaFin<= '" + fechaFin.ToShortDateString() + "')) AS PromocionesFiltrados ";
                select += "WHERE (ROW > " + desde.ToString() + ") AND (ROW <= " + hasta.ToString() + ")";

                resultado = ObtenerDatos(select, "PromocionesFiltradas");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }


        /// <summary>
        /// Función que obtiene el codigo identificativo de una promoción
        /// </summary>
        /// <param name="nombre">Nombre de la promoción</param>
        /// <param name="fechaInicio">Fecha de inicio de la promoción</param>
        /// <param name="fechaFin">Fecha de fin de la promoción</param>
        /// <returns></returns>
        public int ObtenerCodigoProm(string nombre)
        {
        int resultado = 0;
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                string select = "SELECT CodigoPromocion FROM Promocion WHERE (NombrePromocion = '" + nombre + "')";

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = int.Parse(dr["CodigoPromocion"].ToString());
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }
        
        /************************************************** Funciones de Marcos **************************************************/

        /// <summary>
        /// Funcion para comprobar si existe una promocion con el nombre especificado por parámetro en la Base de Datos
        /// </summary>
        /// <param name="nombrePromocion">
        /// Nombre de la promocion que se desea comprobar su existencia en la Base de Datos</param>
        /// <returns>
        /// Devuelve True en caso de que exista una promocion con el nombre especificado en la Base de Datos, False en caso contrario</returns>
        public bool ExistePromocion(string nombrePromocion)
        {
            bool resultado = false;
            SqlConnection conexion = null;

            try
            {
                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                string select = "SELECT NombrePromocion FROM Promocion ";
                select += "WHERE (NombrePromocion = @nombrePromocion)";

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                comandoSql.Parameters.Add("@nombrePromocion", SqlDbType.VarChar, 50);
                comandoSql.Parameters["@nombrePromocion"].Value = nombrePromocion;
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                    resultado = true;
                else
                    resultado = false;
            }
            catch (Exception ex)
            {
                throw ex;
            }
            finally
            {
                if (conexion != null)
                    conexion.Close();
            }

            return resultado;
        }

        /// <summary>
        /// Funcion para actualizar en modo desconectado las promociones de la Base de Datos
        /// </summary>
        /// <param name="dsPromociones">
        /// DataSet en donde se encuentran las promociones modificadas, cuyos cambios se desean reflejar en la Base de Datos</param>
        /// <param name="nombre">
        /// Nombre de la promocion, necesario para reconstruir la select original</param>
        /// <param name="tipoDescuento">
        /// Tipo de descuento (0 = Todos, 1 = Descuento por euros, 2 = Descuento por porcentaje, 3 = Descuento 2x1)</param>
        /// <param name="fechaInicio">
        /// Fecha de inicio de la promocion</param>
        /// <param name="fechaFin">
        /// Fecha de fin de la promocion</param>
        /// <param name="desde">
        /// Desde qué fila de la Base de Datos se había consultado</param>
        /// <param name="hasta">
        /// Hasta qué fila de la Base de Datos se había consultado</param>
        /// <returns>
        /// Devuelve True en caso de que no se haya producido ningún error, Fasle en caso contrario</returns>
        public bool ActualizarPromociones(DataSet dsPromociones, string nombre, int tipoDescuento, DateTime fechaInicio, DateTime fechaFin, int desde, int hasta)
        {
            bool resultado = false;
            string select = "";

            try
            {
                select += "SELECT CodigoPromocion, NombrePromocion as 'Nombre', TipoDescuento as 'Tipo Descuento', CantidadDescuento as 'Cantidad Descuento', FechaInicio as 'Fecha Inicio', FechaFin as 'Fecha Fin'";
                select += "FROM (SELECT CodigoPromocion, NombrePromocion,TipoDescuento, CantidadDescuento,  FechaInicio, FechaFin, ROW_NUMBER() OVER (ORDER BY NombrePromocion ASC) AS ROW ";
                select += "FROM Promocion ";
                select += "WHERE (NombrePromocion LIKE '%" + nombre + "%') ";
                if (tipoDescuento != 0)
                    select += "AND (TipoDescuento = " + tipoDescuento + ") ";
                select += "AND (FechaInicio >= '" + fechaInicio.ToShortDateString() + "') AND (FechaFin<= '" + fechaFin.ToShortDateString() + "')) AS PromocionesFiltrados ";
                select += "WHERE (ROW > " + desde.ToString() + ") AND (ROW <= " + hasta.ToString() + ")";

                resultado = InsertarDatosModificados(dsPromociones, select);
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /// <summary>
        /// Funcion para obtener los datos de la promocion correspondiente al codigo pasado como parámetro
        /// </summary>
        /// <param name="codigoPromocion">
        /// Código de la promocion de la cual se desean obtener los datos</param>
        /// <returns>
        /// Devuelve un DataSet con los datos de la promocion en una tabla llamada "DatosPromocion"</returns>
        public DataSet ObtenerDatosPromocion(int codigoPromocion)
        {
            DataSet resultado = new DataSet();
            string select = "";

            try
            {
                select += "SELECT NombrePromocion, TipoDescuento, CantidadDescuento, FechaInicio, FechaFin ";
                select += "FROM Promocion ";
                select += "WHERE (CodigoPromocion = " + codigoPromocion + ")";

                resultado = ObtenerDatos(select, "DatosPromocion");
            }
            catch (Exception ex)
            {
                throw ex;
            }

            return resultado;
        }

        /************************************************** Fin Funciones de Marcos **************************************************/
        /************************************************** Funciones de Ruben **************************************************/

        /// <summary>
        /// Función que devuelve el tipo de descuento que tiene un juego y su valor
        /// </summary>
        /// <param name="nombre">
        /// El nombre del juego.</param>
        /// <param name="plataforma">
        /// La plataforma del juego.</param>
        /// <returns>
        /// Un vector de strings que contiene el tipo de descuento y su valor</returns>
        public string[] GetTipoPromocion(string nombre, string plataforma)
        {
            string[] promo = new string[2];
            string select = "";
            SqlConnection conexion = null;

            try
            {
                select += "SELECT        Promo, MAX(Descuento) AS Descuento ";
                select += "FROM    (SELECT        '2X1' AS Promo, '0' AS Descuento ";
                select += "         FROM            Promocion AS P INNER JOIN ";
                select += "                         JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "         WHERE        (P.TipoDescuento = 3) AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "') ";
                select += "         UNION ALL ";
                select += "         SELECT        'Descuento en €' AS Promo, P.CantidadDescuento AS Descuento ";
                select += "         FROM            Promocion AS P INNER JOIN ";
                select += "                           JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "         WHERE        (P.TipoDescuento = 1) AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "') AND  ";
                select += "                    (JP.Nombre NOT IN ";
                select += "                    (SELECT        JP.Nombre ";
                select += "                     FROM            Promocion AS P INNER JOIN ";
                select += "                                     JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "                     WHERE        (P.TipoDescuento = 3) AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "'))) ";
                select += "         UNION ALL ";
                select += "         SELECT        'Descuento en %' AS Promo, P.CantidadDescuento AS Descuento ";
                select += "         FROM            Promocion AS P INNER JOIN ";
                select += "                         JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "         WHERE        (P.TipoDescuento = 2) AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "') AND  ";
                select += "                     (JP.Nombre NOT IN ";
                select += "                    (SELECT        JP.Nombre ";
                select += "                     FROM            Promocion AS P INNER JOIN ";
                select += "                                     JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "                     WHERE        (P.TipoDescuento = 3 OR ";
                select += "                     P.TipoDescuento = 1) AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "'))) ";
                select += "         UNION ALL ";
                select += "         SELECT        'Ninguna' AS Promo, '0' AS Descuento ";
                select += "         FROM            Juego ";
                select += "         WHERE        (Nombre = '" + nombre + "') AND (Plataforma = '" + plataforma + "') AND (Nombre NOT IN ";
                select += "                (SELECT        JP.Nombre ";
                select += "                 FROM            Promocion AS P INNER JOIN ";
                select += "                 JuegosPromociones AS JP ON P.CodigoPromocion = JP.Codigo ";
                select += "                 WHERE(P.TipoDescuento = 3 OR P.TipoDescuento = 2 OR P.TipoDescuento = 1)  ";
                select += "                 AND (GETDATE() BETWEEN P.FechaInicio AND P.FechaFin) AND (JP.Nombre = '" + nombre + "') AND (JP.Plataforma = '" + plataforma + "'))))  ";
                select += " AS derivedtbl_1 ";
                select += "GROUP BY Promo ";

                conexion = new SqlConnection(cadConexion);
                conexion.Open();

                SqlCommand comandoSql = new SqlCommand(select, conexion);
                SqlDataReader dr = comandoSql.ExecuteReader();

                if (dr.Read())
                {
                    promo[0] = dr["Promo"].ToString();
                    promo[1] = dr["Descuento"].ToString();
                }
            }
            catch(Exception ex)
            {
                throw ex;
            }

            return promo;
        }
        /************************************************** Fin Funciones de Ruben **************************************************/
    }
}
